// 思路，栈是先进后出，队列是先进先出
// 需要用到两个栈，输入栈和输出栈，输入的话，往输入栈push，输出的话，如果输出栈有值，直接pop，
// 否则，把输入栈的元素全部放到输出栈，再执行pop

function MyQueue() {
    this.stackIn = [] // 输入栈
    this.stackOut = [] // 输出栈
}

// 将元素放入队列尾部
MyQueue.prototype.push = function (val) {
    this.stackIn.push(val)
}

// 移除队首
MyQueue.prototype.pop = function () {
    if (this.stackOut.length) {
       return this.stackOut.pop()
    }
    // 如果输出栈没有元素，则把输入栈的元素从栈顶存入输出栈，后进来的元素到了栈底
    while (this.stackIn.length) {
        this.stackOut.push(this.stackIn.pop())
    }
    return this.stackOut.pop()
}

// 队首元素
MyQueue.prototype.peek = function () {
    let val = this.pop()
    this.stackOut.push(val)
    return val
}

MyQueue.prototype.empty = function () {
    return !this.stackIn.length && !this.stackOut.length
}